// pages/appointment/detail.js
// 引入相关服务
const appointmentService = require('../../services/appointment');
const medicalService = require('../../services/medical');
const util = require('../../utils/util');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    id: null,
    appointment: {},
    medicalRecord: {},
    appointmentTypes: ['普通就诊', '疫苗接种', '绝育手术', '其他'],
    isLoading: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('预约详情页面加载，options:', options);
    if (options.id) {
      this.setData({
        id: options.id
      });
      
      this.loadAppointmentDetail(options.id);
    } else {
      wx.showToast({
        title: '参数错误',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 避免和onLoad重复加载
    if (this.data.id && this.data._isShown) {
      this.loadAppointmentDetail(this.data.id);
    }
    this.data._isShown = true;
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  /**
   * 加载预约详情
   */
  loadAppointmentDetail(id) {
    console.log('开始加载预约详情, id:', id);
    
    wx.showLoading({
      title: '加载中...',
    });
    
    this.setData({
      isLoading: true
    });
    
    // 调用获取预约详情API
    appointmentService.getAppointmentDetail(id)
      .then(res => {
        console.log('预约详情获取成功，原始数据:', JSON.stringify(res));
        
        // 处理可能的null值
        res = res || {};
        
        // 格式化日期 - 使用ISO标准日期格式，兼容iOS
        if (res.appointmentTime) {
          try {
            // 转换日期格式为ISO标准格式 yyyy-MM-ddTHH:mm:ss
            const dateStr = res.appointmentTime.replace(' ', 'T');
            const date = new Date(dateStr);
            if (!isNaN(date.getTime())) {
              res.appointmentTime = util.formatDateTime(date);
            }
          } catch (e) {
            console.error('格式化预约时间失败:', e);
          }
        }
        
        if (res.createTime) {
          try {
            // 转换日期格式为ISO标准格式 yyyy-MM-ddTHH:mm:ss
            const dateStr = res.createTime.replace(' ', 'T');
            const date = new Date(dateStr);
            if (!isNaN(date.getTime())) {
              res.createTime = util.formatDateTime(date);
            }
          } catch (e) {
            console.error('格式化创建时间失败:', e);
          }
        }
        
        // 格式化评价时间
        if (res.review && res.review.createTime) {
          try {
            const dateStr = res.review.createTime.replace(' ', 'T');
            const date = new Date(dateStr);
            if (!isNaN(date.getTime())) {
              res.review.createTime = util.formatDateTime(date);
            }
          } catch (e) {
            console.error('格式化评价时间失败:', e);
          }
        }
        
        // 设置数据
        this.setData({
          appointment: res,
          isLoading: false,
          appointmentId: id
        });
        
        // 如果有就诊记录ID，则获取就诊记录
        if (res.medicalRecordId) {
          this.loadMedicalRecord(res.medicalRecordId);
        } else {
          wx.hideLoading();
        }
      })
      .catch(err => {
        console.error('获取预约详情失败', err);
        
        this.setData({
          isLoading: false
        });
        
        wx.hideLoading();
        
        wx.showToast({
          title: err.message || '获取预约详情失败',
          icon: 'none'
        });
      })
      .finally(() => {
        // 无论成功或失败都需要隐藏loading
        if (this.data.isLoading) {
          this.setData({
            isLoading: false
          });
          wx.hideLoading();
        }
      });
  },

  /**
   * 加载就诊记录
   */
  loadMedicalRecord(id) {
    // 调用获取就诊记录详情API
    medicalService.getMedicalRecordDetail(id)
      .then(res => {
        // 格式化日期
        if (res.visitTime) {
          try {
            const dateStr = res.visitTime.replace(' ', 'T');
            const date = new Date(dateStr);
            if (!isNaN(date.getTime())) {
              res.visitTime = util.formatDateTime(date);
            }
          } catch (e) {
            console.error('格式化就诊时间失败:', e);
          }
        }
        
        this.setData({
          medicalRecord: res
        });
        
        wx.hideLoading();
      })
      .catch(err => {
        console.error('获取就诊记录失败', err);
        
        wx.hideLoading();
        
        wx.showToast({
          title: '获取就诊记录失败',
          icon: 'none'
        });
      });
  },

  /**
   * 取消预约
   */
  cancelAppointment() {
    wx.showModal({
      title: '提示',
      content: '确定要取消该预约吗？',
      success: (res) => {
        if (res.confirm) {
          // 显示加载中
          wx.showLoading({
            title: '取消中...',
            mask: true
          });
          
          // 调用取消预约API
          appointmentService.cancelAppointment(this.data.id)
            .then(res => {
              wx.hideLoading();
              
              wx.showToast({
                title: '取消成功',
                icon: 'success'
              });
              
              // 重新加载预约详情
              this.loadAppointmentDetail(this.data.id);
            })
            .catch(err => {
              console.error('取消预约失败', err);
              wx.hideLoading();
              
              wx.showToast({
                title: err.message || '取消失败，请重试',
                icon: 'none'
              });
            });
        }
      }
    });
  },

  /**
   * 导航到评价页面
   */
  navigateToReview() {
    if (!this.data.appointment || this.data.appointment.status !== 2) {
      wx.showToast({
        title: '只能评价已完成的预约',
        icon: 'none'
      });
      return;
    }
    
    // 如果已有评价，则查看评价
    if (this.data.appointment.review) {
      this.viewReview();
      return;
    }
    
    // 跳转到评价页
    wx.navigateTo({
      url: '/pages/review/create?id=' + this.data.id
    });
  },
  
  /**
   * 查看评价
   */
  viewReview() {
    if (!this.data.appointment || !this.data.appointment.review) {
      wx.showToast({
        title: '暂无评价信息',
        icon: 'none'
      });
      return;
    }
    
    // 弹窗显示评价内容
    const review = this.data.appointment.review;
    wx.showModal({
      title: '评价详情',
      content: `评分：${review.score}分\n评价内容：${review.content || '暂无评价内容'}`,
      showCancel: false
    });
  },

  /**
   * 跳转到在线咨询页面
   */
  navigateToConsult() {
    const staffId = this.data.appointment.staffId;
    const staffName = this.data.appointment.staffName;
    
    if (!staffId) {
      wx.showToast({
        title: '医生信息不存在',
        icon: 'none'
      });
      return;
    }
    
    wx.showLoading({
      title: '创建会话中...',
    });
    
    // 获取consultService
    const consultService = require('../../services/consult');
    
    // 创建会话
    consultService.createConversation(String(staffId))
      .then(conversationId => {
        console.log('会话创建成功，ID:', conversationId);
        
        // 默认状态为进行中(0)，因为这是新创建的会话
        const conversationStatus = 0;
        console.log('新创建的会话，状态强制设置为进行中(0)，会话ID:', conversationId);
        
        wx.hideLoading();
        wx.navigateTo({
          url: `/pages/consult/chat?id=${conversationId}&status=${conversationStatus}`,
          fail: (err) => {
            console.error('无法跳转到聊天页面:', err);
            wx.showToast({
              title: '跳转聊天页面失败',
              icon: 'none'
            });
          }
        });
      })
      .catch(err => {
        console.error('创建会话失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '创建会话失败，请重试',
          icon: 'none'
        });
      });
  },

  /**
   * 跳转到就诊记录详情页面
   */
  navigateToMedicalRecord() {
    wx.navigateTo({
      url: `/pages/record/detail?id=${this.data.appointment.medicalRecordId}`
    });
  }
});